import { getToken, setToken, removeToken } from '@/utils/auth'
import userApi from '@/api/user'
import { constantRoutes } from '@/router'
import {resetRouter} from '@/router'
const state = {
  token: getToken(), // 从缓存中读取初始值
  userInfo: {}, // 存储用户基本资料状态
  routes: constantRoutes  //静态路由的数组
}

const mutations = {
  setToken(state, token) {
    state.token = token
    // 同步到缓存
    setToken(token)
  },
  removeToken(state) {
    // 删除Vuex的token
    state.token = null
    //清除浏览器cooksie中的token
    removeToken()
  },
  // 设置用户的基本资料到vuex中
  setUserInfo(state, userInfo) {
    state.userInfo = userInfo
  },

  // 设置路由
  setRoutes(state, routes) {
    //静态路由+动态路由
    state.routes = [...constantRoutes, ...routes]
  }
}

const actions = {
  // context上下文，传入参数
  async login(context, data) {
    // console.log(data)
    // todo: 调用登录接口，返回一个token
    const result = await userApi.login(data)
    //console.log(result.token);
    // 返回一个token,提交到mutations中定义的setToken()方法中,setToken()方法会修改state中的token,并且为Cookies中的token赋值
    context.commit('setToken', result.token)
  },
  // 获取用户的基本资料(包括用户的角色以及权限信息)
  async getUserInfo(context) {
    const result = await userApi.getUserInfo()
    //console.log(result);
    context.commit('setUserInfo', result)
    //返回用户的信息
    return result
  },
  // 退出登录的action
  logout(context) {
    context.commit('removeToken') // 删除vuex中的token和cookies中的token
    context.commit('setUserInfo', {}) // 删除用户信息
    resetRouter() // 重置路由
  }
}

export default {
  namespaced: true, // 开启命名空间
  state,
  mutations,
  actions
}
